# def factor(num):
#     if num==1:
#         return num
#     else:
#         return num*factor(num-1)
#
# print(factor(5))
import sys

# def add(x,y,debug=False):
#     if debug==True:
#         print(f'x={x},y={y}')
#     return x+y
#
# result=add(10,20,True)
# print(result)

# def test(x,y):
#     print(f'x={x},y={y}')
#
# test(x=10,y=20)
# test(x=100,y=200)

# 列表和元组 列表可变的 元组不可变的 创建好了之后随时能改
# 列表可放所有类型
# a = []
# b = list()
# print(type(a))
# print(type(b))
# a = [1 , 2 , 3 , 4]
# print(a)
#
# a=[1,'hello',True,[4,5,6]]
# print(a[0])
# print(len(a))
#
# a=[1,2,3,4]
# a[2]=100
# print(a)
#
# print(len(a))
#
# a=[1,2,3,4]
# print(a[len(a)-1])
# print(a[-1])  # 支持负数
#
# a=[1,2,3,4]
# print(a[0:4])  # []中有两个数字 ,0表示begin,4表示end  [0,4) 左闭右开
#
# # 2.可省略边界
# a=[1,2,3,4]
# # 省略后边界
# print(a[1:])
# # 省略前边界 从列表0号元素开始取 一直取完
# print(a[:4])
# print(a[:-1])
# print(a[:])
#
# # 3.带有步长的切片
# a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# print(a[1::2])  # 第二个冒号后即为步长 每隔两个元素取一下
#
# # 4.步长的数值可为负数,表示从后往前取
# print(a[8::-2])
#
# #  5.当切片中的范围超出有效下标后,不会出现异常 而是尽可能的往后取
# print(a[::100])

#  取值
# a=[1,2,3,4,5]
# for elem in a:
#     print(elem)
# print(elem)
#
# #  下标
# a = [1, 2, 3, 4, 5]
# for i in range(0, len(a)):
#     a[i] += 10
# print(a)
#
# #使用while循环 通过下标遍历
# a=[1,2,3,4,5]
# i=0
# while i<len(a):
#     print(a[i])
#     i+=1

# a=[1,2,3,4,5]
# a.append(6)
# a.append('hello')
# print(a)

#  2.insert方法
# a=[1,2,3,4]
# a.insert(100,'hello')
# print(a)

# #  3.使用in判定某个元素是否存在
# a=[1,2,3,4,5]
# print(1 in a)
# print(10 in a)
# print(1 not in a)
#
# # 2.使用index方法判定当前元素在列表中的位置
# print(a.index(2))
# # print(a.index(10))
#
# # 3.删除操作 remove\pop
# a.pop()  # 删除末尾的数
# print(a)
# a.pop(0)
# print(a)
#
# a.remove(4)
# print(a)
# a.remove(100)

# a=[1,2,3,4]
# b=[6,7,8,9]
# c=a+b
# print(c)
#
# # 使用extend 把后一个列表拼接到前一个列表中
# a=[1,2,3,4]
# b=[5,6,7,8]
# c=a.extend(b)  #无返回值;
# print(a)
# print(b)
# print(c)
#
# # 使用+=来拼接
# a+=b
# print(a)
# print(b)

# 1.创建元组
# a=()
# b=tuple()
#
# print(type(a))
# print(type(b))

# 2.创建元组时指定初始值
# a=(1,2,3,4)
# print(a)
#
# # 3. 元组中的元素也可任意类型
# a=(1,2,'ge','hello',True)
# print(a)
#
# # 4.通过下标来访问元组的元素
# a=(1,2,3,4,5)
# print(a[1])
# print(a[-1])
# # print(a[100])
#
# # 5.通过切片来获取元组的一部分
# a=(1,2,3,4)
# print(a[1:3])
#
# # 6.元组也同样可使用for循环
# for elem in a:
#     print(elem)
# for elem in range(0,len(a)):
#     print(a[elem])
#
# # 7.可以使用in来判定元素是否存在,使用index查找元素的下标
# a=(1,2,3,4,5)
# print(1 in a)
# print(a.index(5))
#
# # 8.使用+来拼接两个元组
# a=(1,2,3,4,5)
# b=(6,7,8,9,10)
# c=a+b
# print(a,b,c)
#
# # 9. 元组只支持读 不支持改
# a=(1,2,3,4,5)
# # a[0]=100

# 10,当进行多元赋值时,本质上是按照元组的方式来进行工作的

# def getPoint():
#     x=10
#     y=20
#     return x,y
# x,y=getPoint()
# print(type(getPoint()))

# # 1.创建字典
# a={}
# b=dict()
# print(type(a))
# print(type(b))
#
# # 2.创建字典时设置初始值
# a= {'id': 1, 'name': 'zhangsan'} # 一个字典中key的值不一定都一样 value的值也不一定都一样 对key的类型有限制
# print(a)
#
# # 3.使用in来判断是否在字典中 in只可判断key
# a={
#     'id':1,
#     'name':'wangfan'
# }
# print('id' in a)
# print('name' in a)
# print('id' not in a)
#
# # 4.使用方括号[]来根据key获取到value
# a={
#     'id':1,
#     'name':'zhangsan',
#     100:'lisi'
# }
# print(a['name'])
# print(a['id'])
# print(a[100])
#
# # 5.在字典中新增元素,使用[]来进行
# a= {'id': 1, 'name': 'zhangsan', 'score': 90}
# a['score']=0
# print(a)
#
# # 6.根据key修改value 也是用[]
# a['score']=1000
# print(a)
#
# # 7.使用pop方法,根据key来删除键值对 字典的各种操作,都是针对key来进行的
# # a.pop('id')
# print(a)
#
# # 遍历字典 增加使用for循环
# # for elem in a:
# #     print(elem,a[elem])
#
# # keys values items
# print(a.keys())  #返回的结果是一个自定义的类型
# print(a.values())
# print(a.items())
# for key,value in a.items():
#     print(key,value)

# # 使用hash函数能够计算一个变量的哈希值
# print(hash(0))
# print(hash(3.14))
# print(hash('hello'))
# print(hash(True))
# print(hash((1,2,3,4)))
#
# # 有的类型不能计算hash值 不可变->可哈希 可变->不可哈希
# # print(hash([1,2,3]))
# # print(hash({}))
#

# # 文件操作
# f=open('D:\PythonProject/test.txt','r')  # 返回值为一个文件对象 f->file的缩写
# # 第一个参数表示打开文件的路径 第二个参数表示打开方式 r表示read w表示write a表示append 内容写到原有文件末尾
# print(f)
# print(type(f))
# f.close()

# 打开文件个数的上限
# flist=[]
# count=0
# while True:
#     f = open('D:\PythonProject/test.txt', 'r')
#     flist.append(f)
#     count+=1
#     print(f'打开文件的个数为{count}')

#使用write 来实现写文件的操作
# f=open('D:\PythonProject/test.txt','w')
# f.write('hello')
# f.close()
# f=open('D:\PythonProject/test.txt','r')
# f.write('h')
# f.close()

# 直接用写方式打开 将原文件清空
# f=open('D:\PythonProject/test.txt','w')
# f.write('1111\n')
# f.close()
#
# f=open('D:\PythonProject/test.txt','a')
# f.write('2222')
# f.close()

## 读几个
# f=open('D:\PythonProject/test.txt','r',encoding='utf8')
# result=f.read(100)
# print(result)
# f.close()

# 按行来读取
# # 最简单的方法,for循环
# f=open('D:\PythonProject/test.txt','r',encoding='utf8')
# for line in f:
#     print(f'line={line}',end='') # end参数表示每次打印完要加个什么
# f.close()
# print()
#
# # 3.使用readlines 将文件所有内容读出,按行分好
# f=open('D:\PythonProject/test.txt','r',encoding='utf8')
# lines=f.readlines()
# print(lines)
# f.close()

# def fun():
#     f=open('D:\PythonProject/test.txt','r',encoding='utf8')
#
#     f.close()

# 使用上下文管理器来解决忘记文件的close
# def func():
#     with open('D:\PythonProject/test.txt','r',encoding='utf8') as f:
#     # 进行文件处理逻辑
#         if cond:
#             return
#


# import datetime
# from datetime import datetime
# import  datetime as dt
#  # 先构造datetime变量
# date1=dt.datetime(year=2012,month=2,day=14)
# date2=dt.datetime(year=2016,month=2,day=3)
# print(date2-date1)

# def reverseWords(s:str):
#     tokens = s.split(' ')
#     tokens.reverse()
#     return ' '.join(tokens)
#
# print(reverseWords('i am a student'))

# def rotateString(s,goal):
#     if len(s)!=len(goal):
#         return False
#     return goal in s+s
#
# print(rotateString('abcde','edcba'))

def countPrefixes(words:list,s:str):
    count=0
    for word in words:
        if  s.startswith(word): # word是否为s的前缀
            count+=1
    return count
words=['a','b','c','ab','abc','abc']
print(countPrefixes(words,'abc'))


